package design.structure_decorator;

import design.structure_decorator.decorators.DataSource;
import design.structure_decorator.decorators.DataSourceDecorator;
import design.structure_decorator.decorators.Base64Decorator;
import design.structure_decorator.decorators.FileDataSource;
import org.junit.Test;
import util.SystemPathUtil;

/**
 * 装饰器模式
 * 装饰器模式和代理模式代码实现基本一样，但两者实现目的不一样，代理的目的是对原始类控制（如：监控、统计、鉴权、限流、事务、幂等、日志），而装饰器模式的目的在于对原始类进行增强
 */
public class DemoDecorator {
    @Test
    public void test() {
        String filePath =SystemPathUtil.getPath()+ "OutputDemo.txt";
        String testStr = "这是一段测试字符串";
        DataSource dataSource = new FileDataSource(filePath);
        DataSourceDecorator encoded = new Base64Decorator(dataSource);
        encoded.writeData(testStr);

        System.out.println("原始字符为："+testStr);
        System.out.println("装饰后的字符为：" + new FileDataSource(filePath).readData());
        System.out.println("拆除装饰后的字符为："+encoded.readData());
    }

}
